module;

#include "phasar/DataFlow/IfdsIde/DefaultEdgeFunctionSingletonCache.h"
#include "phasar/DataFlow/IfdsIde/EdgeFunctionStats.h"
#include "phasar/DataFlow/IfdsIde/EdgeFunctionUtils.h"
#include "phasar/DataFlow/IfdsIde/EdgeFunctions.h"
#include "phasar/DataFlow/IfdsIde/EntryPointUtils.h"
#include "phasar/DataFlow/IfdsIde/FlowFunctions.h"
#include "phasar/DataFlow/IfdsIde/GenericFlowFunction.h"
#include "phasar/DataFlow/IfdsIde/IDETabulationProblem.h"
#include "phasar/DataFlow/IfdsIde/IFDSTabulationProblem.h"
#include "phasar/DataFlow/IfdsIde/Solver/Compressor.h"
#include "phasar/DataFlow/IfdsIde/Solver/EdgeFunctionCache.h"
#include "phasar/DataFlow/IfdsIde/Solver/FlowEdgeFunctionCacheNG.h"
#include "phasar/DataFlow/IfdsIde/Solver/FlowFunctionCache.h"
#include "phasar/DataFlow/IfdsIde/Solver/IFDSSolver.h"
#include "phasar/DataFlow/IfdsIde/Solver/IdBasedSolverResults.h"
#include "phasar/DataFlow/IfdsIde/Solver/IterativeIDESolver.h"
#include "phasar/DataFlow/IfdsIde/Solver/PathAwareIDESolver.h"

export module phasar.dataflow.ifdside;

export namespace psr {
using psr::AllBottom;
using psr::AllTop;
using psr::CachedEdgeFunction;
using psr::ConstantEdgeFunction;
using psr::defaultComposeOrNull;
using psr::DefaultEdgeFunctionSingletonCache;
using psr::DefaultEdgeFunctionSingletonCacheImpl;
using psr::EdgeFunction;
using psr::EdgeFunctionAllocationPolicy;
using psr::EdgeFunctionBase;
using psr::EdgeFunctionRef;
using psr::EdgeFunctions;
using psr::EdgeFunctionSingletonCache;
using psr::EdgeFunctionStats;
using psr::EdgeIdentity;
using psr::IsEdgeFunction;
using psr::operator==;
using psr::operator<<;
using psr::addSeedsForStartingPoints;
using psr::AllTopFnProvider;
using psr::checkSREquality;
using psr::Compressor;
using psr::ConstantEdgeFunction;
using psr::defaultJoinOrNull;
using psr::DefaultMapKeyCompressor;
using psr::EdgeFunctionCache;
using psr::EdgeFunctionCacheStats;
using psr::EdgeFunctionComposer;
using psr::EdgeFunctionKind;
using psr::ESGEdgeKind;
using psr::FlowEdgeFunctionCache;
using psr::FlowEdgeFunctionCacheNG;
using psr::FlowEdgeFunctionCacheStats;
using psr::FlowFunction;
using psr::FlowFunctionCache;
using psr::FlowFunctionCacheStats;
using psr::FlowFunctionPtrTypeOf;
using psr::FlowFunctions;
using psr::FlowFunctionTemplates;
using psr::forallStartingPoints;
using psr::GenericFlowFunction;
using psr::GenericFlowFunctionView;
using psr::GenericSolverResults;
using psr::getMetaDataID;
using psr::IdBasedSolverResults;
using psr::IDESolver;
using psr::IDETabulationProblem;
using psr::ifdsEqual;
using psr::IFDSIDESolverConfig;
using psr::IFDSSolver;
using psr::IFDSTabulationProblem;
using psr::InitialSeeds;
using psr::IsFlowFunction;
using psr::JoinEdgeFunction;
using psr::LLVMMapKeyCompressor;
using psr::MapKeyCompressorCombinator;
using psr::NodeCompressorTraits;
using psr::NoneCompressor;
using psr::OwningSolverResults;
using psr::SolverConfigOptions;
using psr::SolverResults;
using psr::ValCompressorTraits;
using psr::ZeroedFlowFunction;
using psr::operator<<;
using psr::DefaultIDESolverConfig;
using psr::DequeWorkList;
using psr::IDESolverAPIMixin;
using psr::IDESolverConfigBase;
using psr::IterativeIDESolver;
using psr::IterativeIDESolverBase;
using psr::IterativeIDESolverStats;
using psr::IterIDEPropagationJob;
using psr::JumpFunctionGCMode;
using psr::JumpFunctions;
using psr::OwningSolverResults;
using psr::PathAwareIDESolver;
using psr::PathEdge;
using psr::SmallVectorWorkList;
using psr::solveIDEProblem;
using psr::solveIFDSProblem;
using psr::SolverStatsSelector;
using psr::VectorWorkList;
using psr::WithComputeValues;
using psr::WithEndSummaryTab;
using psr::WithGCMode;
using psr::WithStats;
using psr::WithWorkList;
} // namespace psr

export namespace llvm {
using llvm::cast_convert_val;
using llvm::cast_or_null;
using llvm::cast_retty_impl;
using llvm::CastInfo;
using llvm::CastIsPossible;
using llvm::DenseMapInfo;
using llvm::dyn_cast_or_null;
using llvm::isa_impl_cl;
} // namespace llvm
